home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
LOGIC Apps
/
Logic-APPLE_II_APPS.iso
/
pc
/
LOGIC Apple II 5.25" Library - DOS Part 3
/
DOS077A.dsk
/
FILE MANAGER.bas
< prev
next >
Wrap
BASIC Source File
|
2012-02-16
|
11KB
|
484 lines
5 POKE 115,00: POKE 116,150
10 HIMEM: 38143
25 PRINT "<CTRL-D> BLOAD FILE MANAGER.X"
30 GOTO 3000
100 :
101 REM ** SORT DRIVER **
102 :
105 POKE 0,C%(J) -1
106 POKE 1,D%(J) -1
110 :M% = INT(X%/256)
111 :
115 POKE 2,X% -(M% *256)
120 POKE 3,M%
125 CALL 38144
130 RETURN
200 :
201 REM ** FIELD SELECT **
202 :
205 VTAB 5
210 INPUT "NUMBER OF FIELDS = ";I
215 IF I >10 THEN 210
220 VTAB 8: HTAB 15
225 PRINT "START FIELD STOP FIELD"
230 FOR J = 1 TO I
235 VTAB 10 +J
236 PRINT "FIELD ";J;
240 HTAB 20: INPUT "";C%(J)
242 VTAB 10 +J
245 HTAB 35: INPUT "";D%(J)
250 IF D%(J) <C%(J) OR C%(J) <0 OR D%(J) >256 THEN 235
251 II = II -1
255 NEXT
260 RETURN
300 :
301 REM ** PRINT ENTRY **
302 :
310 FOR I = 1 TO U%
315 PRINT MID$ (A$(E),S(I),L(I));Z$;
320 NEXT : RETURN
400 :
401 REM ** DELETE **
402 :
405 A$(LX%) = "^"
410 J = 1:C%(1) = 1:D%(1) = L%
415 GOSUB 100
420 X% = X% -1
425 RETURN
500 :
501 REM ** DETAIL **
502 :
505 HOME : INVERSE
510 PRINT " DETAIL ";
515 NORMAL : PRINT " D=DELET";
520 PRINT "E C=CHANGE /=LIST"
525 GOSUB 1300: GOSUB 1500
530 K = 3: GOSUB 900
535 ON L GOSUB 400,1600,540
540 L = 1: RETURN
600 :
601 REM ** LIST PRINT **
602 :
603 IF P1 = 1 THEN PRINT "<CTRL-D>PR#1"
605 VTAB 1: HTAB 38: CALL -958
607 OFFSET = (Q% *(P% -1))
610 PRINT P%: VTAB 3
611 FOR J = 1 TO Q%
612 IF SEL = 0 THEN 619
616 E = SE(J +OFFSET)
617 IF J +OFFSET < = KY THEN 630
618 GOTO 625
619 E = J +OFFSET
620 IF E < = X% THEN 627
625 J = Q%: GOTO 655
627 :
630 GOSUB 300
640 PRINT
642 IF P0 = 1 THEN 655
645 INVERSE : PRINT E: NORMAL
655 NEXT :K = 1
660 GOSUB 900: GOSUB 800
665 GOTO 605
700 :
701 REM ** LIST HEADER **
702 :
705 HOME : INVERSE
710 PRINT " LIST ";: NORMAL
715 PRINT " <- -> .= DETAIL";
720 PRINT " /=MENU PAGE=1"
721 M% = 23
725 RETURN
740 :
750 IF Q% = 0 THEN GOSUB 1800
755 GOSUB 700:P% = 1
760 GOSUB 600: RETURN
800 :
801 REM ** DIRECTORY **
802 :
805 ON L GOTO 810,820,830,850
810 P% = P% -1
815 IF P% < = 0 THEN P% = 1
816 RETURN
820 P% = P% +1
821 E = INT(X%/Q%)
822 IF E = (X%/Q%) THEN E = E -1
825 IF P% >E +1 THEN P% = 1
826 RETURN
830 VTAB 1: HTAB 8: CALL -868
835 INVERSE : PRINT " DETAIL OF RECORD NUMBER? ";: NORMAL
840 INPUT " ";LX%
845 GOSUB 500: GOSUB 700
847 RETURN
850 PRINT : PRINT "<CTRL-D>PR#0"
860 POP : RETURN
900 :
901 REM ** CONTROL **
902 :
903 IF K >4 THEN 905
904 H = 1:V = H
905 L = 0: HTAB H: VTAB V: GET Q$
910 L = L +1
912 IF L > LEN(B$(K)) THEN 905
915 IF Q$ < > MID$ (B$(K),L,1) THEN 910
920 RETURN
1000 :
1001 REM ** DEFINE HEADER **
1002 :
1003 HOME
1005 INPUT "NUMBER FIELDS ";Q
1010 DIM G%(Q +1),G$(Q)
1020 VTAB 3: HTAB 12
1025 PRINT "FIELD DESCRIPTION"
1030 INVERSE : VTAB 5
1035 PRINT "START";: HTAB 7
1036 PRINT "PICTURE";: HTAB 15
1040 PRINT "LENGTH";: HTAB 23
1045 PRINT " CAPTION "
1050 NORMAL :I = 1
1055 FOR J = 1 TO Q
1060 K1 = J +6: VTAB K1: PRINT I;
1061 GOTO 2400
1065 HTAB 15: INPUT "";G%(J)
1070 VTAB K1: HTAB 23: INPUT "";G$(J)
1075 I = I +G%(J) +1: NEXT
1080 L% = I
1081 HOME
1085 RETURN
1100 :
1101 REM ** REFORMAT **
1102 REM ** HEADER **
1103 :
1105 FOR J = 1 TO Q
1110 IF LEN(G$(J)) <G%(J) THEN 1125
1115 G$(J) = LEFT$(G$(J),G%(J))
1120 GOTO 1150
1125 Y$ = " "
1126 YZ = G%(J): IF G%(J) >39 THEN YZ = 39
1130 L = (YZ - LEN(G$(J)))/2
1131 IF L <1 THEN 1150
1135 E$ = LEFT$(Y$,L)
1140 G$(J) = E$ +G$(J) +E$
1145 IF LEN(G$(J)) <G%(J) THEN G$(J) = G$(J) +" "
1150 G%(J) = G%(J) +1
1160 NEXT J
1170 RETURN
1200 :
1201 REM ** ENTER **
1202 :
1203 HOME : INVERSE
1204 PRINT " ADD ";: NORMAL
1205 PRINT " /= MENU .= CONTINUE "
1209 X% = X% +1:LX% = X%
1210 GOSUB 1300: GOSUB 2000
1215 IF X% = >MAX THEN STOP
1220 A$(X%) = B$
1225 J = 1:C%(1) = 1:D%(1) = L%
1230 GOSUB 100
1231 PRINT "<CTRL-G>"
1235 K = 4: GOSUB 900
1240 ON L GOTO 1200,1245
1245 RETURN
1300 :
1301 REM ** PRINT HEADER **
1302 :
1305 J = 1:M% = 3:IO = 1
1310 FOR I = 1 TO Q
1315 K = G%(I)
1320 IF G%(I) >39 THEN K = 39
1325 J = J +K
1330 IF J >41 THEN GOSUB 1400
1335 NEXT
1340 IF J < = 41 THEN GOSUB 1400
1345 RETURN
1400 :
1405 FOR L = IO TO I -1
1410 INVERSE : VTAB M%
1415 PRINT G$(L);: NORMAL
1420 PRINT " ";: NEXT
1425 IO = I:J = K:M% = M% +4
1430 HTAB 1: RETURN
1500 :
1501 REM ** PRINT DETAIL **
1502 :
1505 K = 1:J = 1:M% = 4
1510 FOR I = 1 TO Q
1520 VTAB M%: HTAB J
1530 PRINT MID$ (A$(LX%),K,G%(I))
1540 J = J +G%(I):K = K +G%(I)
1550 IF J +G%(I +1) <41 THEN 1570
1560 M% = M% +4:J = 1
1570 NEXT : RETURN
1600 :
1601 REM ** CHANGE **
1602 :
1605 HOME : INVERSE
1610 PRINT " CHANGE ": NORMAL
1615 GOSUB 1300: GOSUB 2000
1620 GOSUB 400:X% = X% +1
1625 A$(X%) = B$
1630 J = 1:C(1) = 1:D%(1) = L%
1635 GOSUB 100: RETURN
1800 :
1801 REM ** PRINT CONTROL **
1802 :
1805 HOME : PRINT "PRINT CONTROL"
1810 GOSUB 200
1815 FOR J = 1 TO I
1820 S(J) = C%(J)
1821 L(J) = D%(J) -C%(J)
1825 NEXT :U% = I
1826 PRINT : PRINT : PRINT
1830 INPUT "NUMBER OF LINES PER PAGE = ";V%
1831 CALL -922
1832 INPUT "NUMBER OF LINES PER ENTRY = ";N%
1835 Q% = INT(V%/N%) -1
1836 CALL -922
1840 PRINT "NUMBER ENTRIES ? .=YES, /=NO "
1845 K = 4: GOSUB 900
1850 IF L = 2 THEN P0 = 1
1855 IF L = 1 THEN P0 = 0
1860 RETURN
1900 :
1901 REM ** SORT CONTROL **
1902 :
1905 HOME
1910 PRINT "SORT CONTROL"
1915 GOSUB 200
1920 FOR J = I TO 1
1925 GOSUB 100: NEXT : RETURN
2000 :
2001 REM ** ENTER RECORD **
2002 :
2003 K = 1
2005 J = 1:M% = 4:B$ = ""
2010 FOR I = 1 TO Q
2011 VTAB M%: HTAB J
2012 PRINT MID$ (A$(LX%),K,G%(I))
2015 VTAB M%: HTAB J
2016 IF N1$(I) = "9" THEN 2300
2019 INPUT "";C$
2020 LN = LEN(C$)
2025 IF LN > = G%(I) THEN 2015
2026 IF LN = G%(I) THEN 2030
2027 E$ = LEFT$(Y$,G%(I) -LN)
2028 C$ = C$ +E$
2030 J = J +G%(I):B$ = B$ +C$
2031 K = K +G%(I)
2035 IF J +G%(I +1) <41 THEN 2045
2040 M% = M% +4:J = 1
2045 NEXT
2050 RETURN
2100 :
2101 REM ** SELECT **
2102 :
2105 HOME : INPUT "STARTING POSITION = ";XX
2110 INPUT "STRING = ";XX$
2111 YX = LEN(XX$)
2112 KY = 0:SEL = 1
2115 FOR J = 1 TO X%
2120 IF MID$ (A$(J),XX,YX) < >XX$ THEN 2125
2121 KY = KY +1:SE(KY) = J
2125 NEXT : RETURN
2200 :
2201 REM ** DESELECT **
2202 :
2205 SEL = 0: RETURN
2290 HOME : VTAB 10: HTAB 20
2295 X6 = 10:X5 = 6
2300 :
2301 REM ** NUMBER INPUT **
2302 :
2303 X6 = N3(I):X5 = N2(I)
2304 W$ = ""
2305 X0 = PEEK(36) +1
2310 X2 = X0 +X5: HTAB X2
2315 GET C$:X3 = ASC(C$)
2320 IF X3 < >13 THEN 2325
2321 GOSUB 2340: GOTO 2380
2325 IF X3 < >46 THEN 2330
2326 GOSUB 2340: GOTO 2360
2330 W$ = W$ +C$:X2 = X2 -1
2335 HTAB X2: PRINT W$;
2336 GOTO 2315
2340 I1 = X5 - LEN(W$)
2341 IF I1 = 0 THEN 2355
2345 FOR J1 = 1 TO I1
2350 W$ = " " +W$: NEXT
2355 W$ = W$ +".": RETURN
2360 HTAB X0: PRINT W$;
2365 GET C$:X3 = ASC(C$)
2370 IF X3 = 13 THEN 2380
2375 W$ = W$ +C$: GOTO 2360
2380 I1 = X6 - LEN(W$)
2381 IF I1 = 0 THEN 2391
2385 FOR J1 = 1 TO I1
2390 W$ = W$ +"0": NEXT
2391 W$ = W$ +" "
2392 INVERSE
2395 HTAB X0: PRINT W$
2396 NORMAL
2397 C$ = W$: GOTO 2030
2400 :
2401 REM ** PICTURE **
2402 :
2405 V = K1:H = 7:K = 5: GOSUB 900
2410 N1$(J) = Q$: PRINT Q$;
2415 IF L = 1 THEN 1065
2420 H = 15:K = 6: GOSUB 900
2425 N2(J) = L: PRINT L;".";
2430 H = 17: GOSUB 900
2435 PRINT L:N3(J) = L +N2(J) +1
2440 G%(J) = N3(J)
2445 GOTO 1070
2500 :
2501 REM ** TOTAL **
2502 :
2505 FOR J = 1 TO X%
2510 IF SE(J) = 1 THEN 2525
2515 I = VAL( MID$ (A$(J),C%(1),D%(1) -C%(1)))
2520 K = K +I
2525 NEXT
2530 VTAB 5: HTAB 1: PRINT K
2535 RETURN
2550 I = 1: HOME : INVERSE
2555 PRINT " TOTAL ";: NORMAL
2560 PRINT " /= MENU .= CONTINUE "
2564 GOSUB 220: GOSUB 2500
2566 VTAB 12: PRINT "TOTAL = ";K
2570 K = 4: GOSUB 900
2575 ON L GOTO 2550
2580 RETURN
3000 :
3001 REM ** INITIAL **
3002 :
3005 DIM A$(300)
3010 DIM SE(300)
3015 MAX = 300
3020 B$(1) = CHR$(8) + CHR$(21) +"./"
3025 B$(2) = "123456789A"
3030 B$(3) = "DC/"
3035 B$(4) = "./"
3040 B$(5) = "X9"
3045 B$(6) = "1234567890"
3050 Y$ = " "
3055 U% = 1:S(1) = 1:L(1) = L%
3060 N% = 2:V% = 23
3065 GOTO 3200
3100 :
3101 REM ** MAIN MENU **
3102 :
3105 HOME : INVERSE
3110 PRINT " MAIN MENU "
3115 NORMAL : VTAB 4
3120 PRINT "1. ADD"
3125 PRINT "2. LIST"
3130 PRINT "3. SORT"
3135 PRINT "4. SELECT"
3140 PRINT "5. DESELECT"
3145 CALL -922
3150 PRINT "6. TOTAL"
3155 PRINT "7. FORMAT"
3160 PRINT "8. FILE OUTPUT"
3165 CALL -922
3170 PRINT "9. STOP"
3175 CALL -922: CALL -922
3180 PRINT "NUMBER OF RECORDS = ";X%
3185 CALL -922
3190 GOSUB 8000
3195 K = 2: GOSUB 900: HOME
3196 ON L GOSUB 1200,750,1900,2100,2200,2550,1800,7000,3198,8010
3197 GOTO 3100
3198 R% = 1: GOSUB 6000: END
3200 :
3201 REM ** FILE QUESTION **
3202 :
3205 HOME
3210 PRINT "FILE MANAGER"
3215 VTAB 5
3220 INPUT "FILE NAME = ";M$
3225 VTAB 7
3226 INPUT "HEADER NAME = ";N$
3227 VTAB 10
3230 PRINT "IS THIS A NEW FILE (Y/N) ";
3235 GET Q$: PRINT
3240 IF Q$ < >"Y" AND Q$ < >"N" THEN 3225
3245 IF Q$ = "Y" THEN 3300
3255 R% = 2: GOSUB 5000: GOSUB 1100
3256 L(1) = L%
3257 IF L% >39 THEN L(1) = 39
3258 N$ = M$
3260 R% = 1: GOSUB 5000
3265 GOTO 3100
3300 GOSUB 1000:R% = 2
3305 GOSUB 6000: GOSUB 1100
3310 N$ = M$: GOTO 3100
5000 :
5001 REM ** READ RECORD **
5002 :
5005 PRINT "<CTRL-D>OPEN ";N$
5010 PRINT "<CTRL-D>READ ";N$
5015 ON R% GOSUB 5100,1000
5020 PRINT "<CTRL-D>CLOSE ";N$
5025 RETURN
5100 :
5101 REM ** READ RECORD **
5102 :
5105 INPUT X%
5110 FOR J = 1 TO X%
5115 INPUT A$(J): NEXT
5120 RETURN
5125 NEXT : RETURN
6000 :
6001 REM ** WRITE FILE **
6002 :
6003 PRINT
6005 PRINT "<CTRL-D>OPEN ";N$
6010 PRINT "<CTRL-D>WRITE ";N$
6015 ON R% GOSUB 6100,6200,7100
6020 PRINT "<CTRL-D>CLOSE ";N$
6025 RETURN
6100 :
6101 REM ** WRITE RECORD **
6102 :
6105 PRINT X%
6110 FOR J = 1 TO X%
6115 PRINT A$(J): NEXT
6120 RETURN
6200 :
6201 REM ** WRITE HEADER **
6202 :
6203 PRINT Q
6205 FOR J = 1 TO Q
6210 PRINT N1$(J)
6212 IF N2(J) < >0 THEN 6230
6215 PRINT G%(J)
6220 GOTO 6240
6230 PRINT N2(J)
6235 PRINT N3(J) -N2(J) -1
6240 PRINT G$(J)
6245 NEXT
6250 RETURN
7000 :
7001 REM ** OUTPUT FILE **
7002 REM ** REORGANIZED **
7003 :
7005 HOME : INPUT "NEW FILE NAME = ";M$
7010 R% = 3:TE$ = N$:N$ = M$
7015 GOSUB 6000
7020 GOSUB 6100
7025 N$ = TE$: RETURN
7100 :
7101 REM ** REORGANIZED **
7102 REM ** FILE PRINT **
7103 :
7104 PRINT X%
7105 FOR J = 1 TO X%
7110 GOSUB 300
7125 PRINT : NEXT : RETURN
8000 VTAB 4: HTAB 20
8001 IF P1 = 1 THEN INVERSE
8002 PRINT "A. PRINTER"
8003 NORMAL
8005 RETURN
8010 P1 = NOT (P1)
8015 RETURN